home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DBio.more / USeqMail.inc.p < prev    next >
Encoding:
Text File  |  1996-07-05  |  53.1 KB  |  2,100 lines  |  [TEXT/R*ch]

  1. { USeqMail.inc.p -- SMTP SendMail and POP CheckMail }
  2. { Copyright 1992 by d.g.gilbert, for SeqApp }
  3.  
  4. {$S USeqMail }
  5.  
  6. CONST
  7.     
  8.     kSendmailWindID = 2103;             
  9.     kBugmailWindID     = 2106;     
  10.     kGBFetchWindID    = 2105;
  11.     kEMBLFetchWindID    = 2107;
  12.     kMailPrefWindID = 2108;
  13.     kPopMailWindID = 2102;
  14.     kCheckMailWindID = kPopMailWindID;
  15.     
  16.     kGBFastaWindID = 2110;
  17.     kGBBlastWindID = 2111;
  18.  
  19.     kGeneIDWindID = 2112;
  20.     kGrailWindID = 2113;
  21.     kUHServerWindID = 2114;
  22.  
  23.     kNCBIBlastWindID = 2115;
  24.     kNCBIFetchWindID    = 2116;
  25.     kGenmarkWindID = 2118;
  26.     kBlocksWindID = 2119;
  27.     kPythiaWindID = 2120;
  28.     
  29.  
  30. TYPE
  31.  
  32.     { These guys are known only here ... need not be public}
  33.     
  34.     TBugmailWindow    = OBJECT (TSendmailWindow)
  35.         fSendUpdate    : TCheckBox;
  36.         PROCEDURE TBugmailWindow.ISendmailWindow; OVERRIDE;
  37.         PROCEDURE TBugmailWindow.DoEvent(eventNumber: EventNumber; 
  38.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  39.         PROCEDURE TBugmailWindow.Sendit; OVERRIDE;
  40.         END;
  41.         
  42.     TGBFetchWindow    = OBJECT (TSendmailWindow)
  43.         PROCEDURE TGBFetchWindow.ISendmailWindow; OVERRIDE;
  44.         END;
  45.                     
  46.     TEMBLFetchWindow    = OBJECT (TSendmailWindow)
  47.         PROCEDURE TEMBLFetchWindow.ISendmailWindow; OVERRIDE;
  48.         END;
  49.  
  50.     TUHServerWindow    = OBJECT (TSendmailWindow)
  51.         PROCEDURE TUHServerWindow.ISendmailWindow; OVERRIDE;
  52.         END;
  53.  
  54.     TGeneidWindow    = OBJECT (TSendmailWindow)
  55.         fUseNetgene: TCheckBox;
  56.         PROCEDURE TGeneidWindow.IGeneidWindow( aSeq: TSequence);
  57.         PROCEDURE TGeneidWindow.Sendit; OVERRIDE;
  58.         END;
  59.  
  60.     TGenmarkWindow    = OBJECT (TSendmailWindow)
  61.         fPSGraph: TCheckBox;
  62.         fMarkovOrder: TNumberText;
  63.         fWinStep    : TNumberText;
  64.         fThreshold: TNumberText;
  65.         fAnalWin    : TNumberText;
  66.         fPSTitle: TEditText;    
  67.         
  68.         PROCEDURE TGenmarkWindow.IGenmarkWindow( aSeq: TSequence);
  69.         PROCEDURE TGenmarkWindow.Sendit; OVERRIDE;
  70.         PROCEDURE TGenmarkWindow.SetPrefID;  OVERRIDE; 
  71.         END;
  72.  
  73.     TBlocksWindow    = OBJECT (TSendmailWindow)
  74.         PROCEDURE TBlocksWindow.IBlocksWindow( aSeq: TSequence);
  75.         PROCEDURE TBlocksWindow.Sendit; OVERRIDE;
  76.         END;
  77.         
  78.     TGrailWindow    = OBJECT (TSendmailWindow)
  79.         fMailID    : TEditText;
  80.         fNumSeqs: integer;
  81.         
  82.         PROCEDURE TGrailWindow.IGrailWindow( aSeqList: TSeqList);
  83.         PROCEDURE TGrailWindow.Sendit; OVERRIDE;
  84.         PROCEDURE TGrailWindow.SetPrefID;  OVERRIDE; 
  85.         END;
  86.  
  87.     TPythiaWindow    = OBJECT (TSendmailWindow)
  88.         fDoAlu    : TRadio;
  89.         fDoRpts    : TRadio;
  90.         
  91.         PROCEDURE TPythiaWindow.IPythiaWindow( aSeqList: TSeqList);
  92.         PROCEDURE TPythiaWindow.Sendit; OVERRIDE;
  93.         PROCEDURE TPythiaWindow.SetPrefID;  OVERRIDE; 
  94.         END;
  95.  
  96.     TGBFastaWindow    = OBJECT (TSendmailWindow)
  97.         fScore    : TNumberText;
  98.         fAligns    : TNumberText;
  99.         fDatabank    : TPopUp;
  100.         fAmino, fNucleic : TRadio;        
  101.         
  102.         PROCEDURE TGBFastAWindow.IGBFastAWindow( aSeq: TSequence);
  103.         PROCEDURE TGBFastAWindow.Sendit; OVERRIDE;
  104.         PROCEDURE TGBFastAWindow.DoEvent(eventNumber: EventNumber; 
  105.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  106.         PROCEDURE TGBFastAWindow.SetPrefID;  OVERRIDE; 
  107.         END;
  108.  
  109.     TGBBlastWindow    = OBJECT (TSendmailWindow)
  110.         fDatabank    : TPopUp;
  111.         fAmino, fNucleic : TRadio;        
  112.         
  113.         PROCEDURE TGBBlastWindow.IGBBlastWindow( aSeq: TSequence);
  114.         PROCEDURE TGBBlastWindow.Sendit; OVERRIDE;
  115.         PROCEDURE TGBBlastWindow.DoEvent(eventNumber: EventNumber; 
  116.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  117.         PROCEDURE TGBBlastWindow.SetPrefID;  OVERRIDE; 
  118.         END;
  119.  
  120.     TNCBIBlastWindow    = OBJECT (TSendmailWindow)
  121.         fDatabank    : TPopUp;
  122.         fMethod        : TPopUp;
  123.         fAmino, fNucleic : TRadio;        
  124.         fDesc, fAlign    : TNumberText;
  125.         fExcut, fICut    : TEditText;
  126.         fHistogram: TCheckBox;
  127.         
  128.         PROCEDURE TNCBIBlastWindow.INCBIBlastWindow( aSeq: TSequence);
  129.         PROCEDURE TNCBIBlastWindow.SetMenus( redraw: boolean);
  130.         PROCEDURE TNCBIBlastWindow.Sendit; OVERRIDE;
  131.         PROCEDURE TNCBIBlastWindow.DoEvent(eventNumber: EventNumber; 
  132.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  133.         PROCEDURE TNCBIBlastWindow.SetPrefID;  OVERRIDE; 
  134.         END;
  135.  
  136.     TNCBIFetchWindow    = OBJECT (TSendmailWindow)
  137.         fDatabank    : TPopUp;
  138.         fNDocs, fNLines, fStartDoc    : TNumberText;
  139.         
  140.         PROCEDURE TNCBIFetchWindow.INCBIFetchWindow;
  141.         PROCEDURE TNCBIFetchWindow.Sendit; OVERRIDE;
  142.         PROCEDURE TNCBIFetchWindow.SetPrefID;  OVERRIDE; 
  143.         END;
  144.  
  145.  
  146.  
  147.  
  148. PROCEDURE CryptPassword(VAR password: Str255);
  149. VAR      s        : Str255;  
  150.             len, i, j : integer;
  151. BEGIN {// from Nuntius, thanks P. Speck}
  152.     s:= '01';  { version number }
  153.     len:= Length(password);
  154.     j:= Length(s);
  155.     for i:= 1 to len do begin
  156.         j:= j+1; s[j]:= chr(97 + bAnd(Random, 15));             {s += char(97 + (Random() & 15));}
  157.         j:= j+1; s[j]:= chr(bXor( ord(password[i]), 9));     {s += password[i] ^ 9;}
  158.         j:= j+1; s[j]:= chr(107 + bAnd(Random, 15));             {s += char(107 + (Random() & 15));}
  159.         END;
  160.     s[0]:= chr(j);
  161.     password:= s;
  162. END;
  163.  
  164. FUNCTION DeCryptPassword(VAR password: Str255): Boolean;
  165. VAR      s        : Str255;  
  166.             len, i, j : integer;
  167. BEGIN {// from Nuntius, thanks P. Speck}
  168.     s:= password;
  169.     len:= Length(s);
  170.     password:= '';
  171.     DeCryptPassword:= false; 
  172.     if (len < 2) THEN EXIT(DeCryptPassword); {missing version number}
  173.     if (s[1] <> '0') | (s[2] <> '1') THEN EXIT(DeCryptPassword); { unknown version }
  174.     i:= 4; j:= 0;
  175.     while (i < len) do begin
  176.         j:= j+1;
  177.         password[j]:= chr( bXor(ord(s[i]), 9) );  { pass += s[i] ^ 9; }
  178.         i:= i+3; 
  179.         END;
  180.     password[0]:= chr(j);
  181.     DeCryptPassword:= true;
  182. END;
  183.  
  184.  
  185.  
  186. {    TMailPrefWindow    -----------------}
  187.  
  188. PROCEDURE TMailPrefWindow.IMailPrefWindow;
  189. VAR   aStr: Str255;
  190. BEGIN    
  191.     IPrefWindow;
  192.   fFrom       := TPrefEditText(FindSubView('MAIL'));  
  193.   fPOPAddress    := TPrefEditText(FindSubView('POPP'));  
  194.   fSMTPHost    := TPrefEditText(FindSubView('SMTP'));  
  195.   fPassword := THiddenText(FindSubView('PASS'));  
  196.   fKeepPass := TCheckBox(FindSubView('cPAS'));  
  197.  
  198.     fPassword.GetText( aStr);  
  199.     if (DeCryptPassword(aStr)) THEN ;  
  200.     fPassword.SetText( aStr, kDontRedraw);  
  201. END;
  202.  
  203.  
  204. PROCEDURE TMailPrefWindow.SetGlobals;  
  205. VAR        aStr: Str255;
  206. BEGIN
  207.     fFrom.GetText( aStr); gMyMailAddress:= aStr;
  208.     fSMTPHost.GetText( aStr); gSMTPHost:= aStr;
  209.     fPOPAddress.GetText( aStr); gMyPOPAddress:= aStr;
  210.     fPassword.GetText( aStr); gPassword:= aStr;
  211. END;
  212.  
  213. PROCEDURE TMailPrefWindow.ModalDialog;  
  214. VAR        
  215.         aStr: Str255;
  216.         dismisser : IDType;
  217. BEGIN
  218.     SELF.SetModality( True); {!!! or PoseModally will fail !}
  219.     dismisser := SELF.PoseModally;
  220.     IF dismisser = 'OKAY' THEN BEGIN
  221.         fWantSave:= TRUE;
  222.         SetGlobals;
  223.         fPassword.GetText( aStr);  
  224.         CryptPassword(aStr); {do this so no visible password in Prefs file}
  225.         fPassword.SetText( aStr, kDontRedraw);  
  226.         END
  227.     ELSE BEGIN
  228.         fWantSave:= FALSE;    
  229.         END;
  230.     IF NOT fKeepPass.isOn THEN fPassword.SetText('',FALSE);        
  231. END;
  232.  
  233. PROCEDURE TMailPrefWindow.SetPrefID;  
  234. BEGIN
  235.     gPrefWindID:= kMailPrefWindID; gPrefWindName:= 'TMailPrefWindow';
  236. END;
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246. FUNCTION BadSMTPAddresses: Boolean;
  247. BEGIN
  248.     IF (length(gSMTPHost) = 0) | (gSMTPHost[1] = '»')
  249.      | (length(gMyMailAddress)=0) | (gMyMailAddress[1] = '»') THEN
  250.         OpenMailPref;
  251.  
  252.     BadSMTPAddresses:= (length(gSMTPHost) = 0) | (gSMTPHost[1] = '»')
  253.          | (length(gMyMailAddress)=0) | (gMyMailAddress[1] = '»');
  254. END;
  255.  
  256.  
  257. { TSendmailWindow ------------------------}
  258.  
  259. CONST
  260.     mSendit = 2103;
  261.     mHelp        = 2104;
  262.     
  263. PROCEDURE TSendmailWindow.MakeSMTP( theTo, theSubject, theCCopy: Str255; 
  264.                                                     theMessage: Handle; isTEHandle: Boolean); 
  265. VAR
  266.     aSMTP    : TSMTP;
  267. BEGIN
  268.     New(aSMTP);
  269.     FailNIL(aSMTP);
  270.     aSMTP.ISMTP( gSMTPHost);
  271.     aSMTP.fMailerID:= gMailerID;
  272.     aSMTP.InstallMessageLine( fStatus); 
  273.     IF isTEHandle THEN
  274.         aSMTP.SendMailTE( theTo, gMyMailAddress, theSubject, theCCopy, TEHandle(theMessage))
  275.     ELSE
  276.         aSMTP.SendMail( theTo, gMyMailAddress, theSubject, theCCopy, theMessage);
  277.     aSMTP.Free;
  278. END;
  279.  
  280. PROCEDURE TSendmailWindow.Sendit; 
  281. VAR
  282.     theTo, theSubject, theCCopy: str255;
  283. BEGIN
  284.     IF BadSMTPAddresses THEN EXIT(Sendit);
  285.         
  286.     IF (fTo<>NIL) THEN fTo.GetText( theTo) ELSE EXIT(SendIt);
  287.     IF (fSubject<>NIL) THEN fSubject.GetText( theSubject) ELSE theSubject:= '';
  288.     IF (fCopySelf<>NIL) & (fCopySelf.IsOn) THEN theCCopy:= gMyMailAddress 
  289.     ELSE theCCopy:= '';
  290.     MakeSMTP( theTo, theSubject, theCCopy, Handle(fSendmailView.fHTE), TRUE);
  291. END;
  292.  
  293. PROCEDURE TSendmailWindow.DoEvent(eventNumber: EventNumber; 
  294.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  295. VAR
  296.         aHelpFile: TStaticText;
  297.         aHelpDocument: THelpDocument;
  298.         aStr        : Str255;
  299.         fi            : FailInfo;
  300.  
  301.     PROCEDURE HdlFail(error: integer;  message: LONGINT);
  302.     BEGIN
  303.         TObject(aHelpDocument):= FreeIfObject(aHelpDocument); 
  304.     END;
  305.     
  306. BEGIN
  307.     CASE eventNumber OF
  308.         mSendit    : BEGIN 
  309.                 Sendit; 
  310.                 CloseAndFree; 
  311.                 END;
  312.         
  313.         mHelp    : BEGIN
  314.                 aHelpFile:= TStaticText(FindSubView('tHlp'));
  315.                 IF aHelpFile<>NIL THEN BEGIN
  316.                     aHelpDocument:= NIL;
  317.                     aHelpFile.GetText( aStr);
  318.                     New(aHelpDocument);
  319.                     FailNIL(aHelpDocument);
  320.                     CatchFailures(fi, HdlFail);
  321.                     aHelpDocument.IHelpDocument( aStr, gAppWDRef);
  322.                     TPrefApplication(gApplication).OpenNewDocument(aHelpDocument);
  323.                     Success(fi);
  324.                     END;
  325.                 END;
  326.                         
  327.         mCheckboxHit: 
  328.           IF (fUnlockTexts<>NIL) & (source=fUnlockTexts) THEN BEGIN
  329.                 IF fUnlockTexts.IsOn THEN UnlockTexts
  330.                 ELSE RelockTexts;
  331.                 END; 
  332.  
  333.         Otherwise
  334.             INHERITED DoEvent(eventNumber, source, event);
  335.         END;
  336. END;
  337.  
  338.         
  339. PROCEDURE TSendmailWindow.ISendmailWindow;
  340. VAR
  341.     aSendBut: TButton;
  342.     aFrom        : TEditText;
  343. BEGIN    
  344.     IPrefWindow;
  345.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  346.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  347.   fTo             := TEditText(FindSubView('eTo:'));  
  348.   fSubject    := TEditText(FindSubView('eSb:'));  
  349.     fStatus        := TStaticText(FindSubView('tSTS'));
  350.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  351.   fCopySelf    := TCheckBox(FindSubView('cCPY'));  
  352.   aFrom            := TEditText(FindSubView('eFm:')); { used as Static Text }  
  353.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  354.     aSendBut:= TButton(FindSubView('OKAY'));
  355.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  356.     aSendBut:= TButton(FindSubView('Help'));
  357.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  358.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  359. END;
  360.  
  361. PROCEDURE TSendmailWindow.OpenWindow;
  362. BEGIN
  363.     SELF.ISendmailWindow;
  364.     SELF.ShowReverted; 
  365.     SELF.Open; 
  366.     SELF.Select;     
  367. END;
  368.         
  369.  
  370. PROCEDURE UnlockEditText( aTxt: TEditText);
  371. BEGIN
  372.     IF (aTxt<>NIL) & (NOT aTxt.WantsToBeTarget) THEN BEGIN
  373.         {re-adorn w/ shadow box ?}
  374.         aTxt.ViewEnable(TRUE, TRUE);
  375.         aTxt.fMaxChars:= 251; {tricky key that we were locked}
  376.         END;
  377. END;
  378.  
  379. PROCEDURE LockEditText( aTxt: TEditText; force: boolean);
  380. BEGIN
  381.     IF (aTxt<>NIL) & ((aTxt.fMaxChars = 251) | force) THEN BEGIN
  382.         {re-adorn w/ shadow box ?}
  383.         aTxt.StopEdit;
  384.         aTxt.ViewEnable(FALSE, TRUE);
  385.         aTxt.fMaxChars:= 255;  
  386.         END;
  387. END;
  388.  
  389. PROCEDURE TSendmailWindow.UnlockTexts;
  390. BEGIN
  391.     UnlockEditText( fTo);
  392.   UnlockEditText( fSubject);
  393. END;
  394.  
  395. PROCEDURE TSendmailWindow.RelockTexts;
  396. BEGIN
  397.     LockEditText( fTo, FALSE);
  398.   LockEditText( fSubject, FALSE);
  399. END;
  400.  
  401.  
  402.  
  403. PROCEDURE TSendmailWindow.SetPrefID;  
  404. BEGIN
  405.     gPrefWindID:= kSendmailWindID; gPrefWindName:= 'TSendmailWindow';
  406. END;
  407.  
  408.  
  409.  
  410.  
  411. { TBugmailWindow ------------}
  412.  
  413.     
  414. PROCEDURE TBugmailWindow.ISendmailWindow;
  415. BEGIN
  416.     INHERITED ISendmailWindow;
  417.     fWantSave:= FALSE;
  418. END;
  419.  
  420. PROCEDURE TBugmailWindow.Sendit; OVERRIDE;
  421. VAR
  422.     theTo, theSubject, theCCopy: str255;
  423.     theMessage: TEHandle;
  424.     strHand: StringHandle;
  425.     len    : integer;
  426. BEGIN
  427.     IF BadSMTPAddresses THEN EXIT(Sendit);
  428.         
  429.     IF (fTo<>NIL) THEN fTo.GetText( theTo) ELSE EXIT(SendIt);
  430.     IF (fSubject<>NIL) THEN fSubject.GetText( theSubject) ELSE theSubject:= '';
  431.     IF (fCopySelf<>NIL) & (fCopySelf.IsOn) THEN theCCopy:= gMyMailAddress 
  432.     ELSE theCCopy:= '';
  433.  
  434.     MakeSMTP( theTo, theSubject, theCCopy, Handle(fSendmailView.fHTE), TRUE);
  435. END;
  436.  
  437. PROCEDURE TBugmailWindow.DoEvent(eventNumber: EventNumber; 
  438.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  439. BEGIN
  440.     CASE eventNumber OF
  441.         mSendit            : BEGIN 
  442.             Sendit; 
  443.             CloseAndFree; 
  444.             END;
  445.         
  446.         Otherwise
  447.             INHERITED DoEvent(eventNumber, source, event);
  448.         END;
  449. END;
  450.  
  451.  
  452.  
  453. PROCEDURE TGBFetchWindow.ISendmailWindow;
  454. BEGIN
  455.     INHERITED ISendmailWindow;
  456.     fWantSave:= FALSE;
  457. END;
  458.             
  459. PROCEDURE TEMBLFetchWindow.ISendmailWindow;
  460. BEGIN
  461.     INHERITED ISendmailWindow;
  462.     fWantSave:= FALSE;
  463. END;
  464.  
  465.  
  466. PROCEDURE TUHServerWindow.ISendmailWindow;
  467. BEGIN
  468.     INHERITED ISendmailWindow;
  469.     fWantSave:= FALSE;
  470. END;
  471.  
  472. {----
  473. PROCEDURE THiddenText.DoSubstitution(VAR theText: Str255); OVERRIDE;
  474. VAR  i    : INTEGER;
  475. BEGIN
  476.     FOR i:= 1 to length(theText) DO theText[i]:= '•';
  477. END;
  478.  
  479. PROCEDURE THiddenText.StopEdit; OVERRIDE;
  480. BEGIN
  481.     INHERITED StopEdit;
  482.     ForceRedraw;  
  483. END;
  484. ---}
  485.  
  486.  
  487.  
  488.                         {!! This should become enclosed in a Document .. }
  489.  
  490. { TPopmailWindow ------------------------}
  491.  
  492. CONST
  493.     mPopNext     = 2102;
  494.     mPopLast     = mPopNext+1;
  495.     mPopDelete = mPopNext+2;
  496.     mPopSave    = mPopNext+3;
  497.     
  498. PROCEDURE TPopmailWindow.IPopmailWindow;
  499. BEGIN    
  500.     IPrefWindow; 
  501.     fWantSave:= TRUE;
  502.     fMailView:= TDlogTextView(FindSubView('MAIL'));
  503.     IF (fMailView<>NIL) THEN fMailView.IDlogTextView(NIL);
  504.     fPOP    := NIL;
  505.     
  506.     fMsgNum:= 0;
  507.     
  508.   fFrom            := TEditText(FindSubView('eFm:'));    
  509.   fSubject    := TEditText(FindSubView('eSb:'));  
  510.     fStatus        := TStaticText(FindSubView('tSTS'));
  511.     IF (fFrom<>NIL) THEN fFrom.SetText( '', FALSE);
  512.     IF (fSubject<>NIL) THEN fSubject.SetText( '', FALSE);
  513.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  514.  
  515.     fNextBut    := TButton(FindSubView('NEXT'));
  516.     FailNIL( fNextBut);
  517.     fNextBut.fEventNumber:= mPopNext;
  518.     fLastBut    := TButton(FindSubView('LAST'));
  519.     FailNIL( fLastBut);
  520.     fLastBut.fEventNumber:= mPopLast;
  521.     fDelBut    := TButton(FindSubView('bDEL'));
  522.     fSaveBut    := TButton(FindSubView('bSAV'));
  523.     IF (fDelBut<>NIL) then fDelBut.fEventNumber:= mPopDelete;
  524.     IF (fSaveBut<>NIL) then fSaveBut.fEventNumber:= mPopSave;
  525.  
  526.     fNextBut.ViewEnable( TRUE,  kDontRedraw);
  527.     fNextBut.Dimstate( FALSE,  kDontRedraw);
  528.     
  529.     fDelCheck    := TCheckBox(FindSubView('cDEL'));
  530.   fCountTxt    := TStaticText(FindSubView('tCNT'));  
  531. END;
  532.  
  533.  
  534. PROCEDURE TPopmailWindow.SetPrefID; OVERRIDE;  
  535. BEGIN
  536.     gPrefWindID:= kPopMailWindID; gPrefWindName:= 'TPopmailWindow';
  537. END;
  538.  
  539.  
  540.     
  541. PROCEDURE TPopmailWindow.SaveMail; 
  542. VAR
  543.         where    : point;
  544.         reply    : SFReply;
  545.         h            : Handle;
  546.         fileref, err: integer;
  547.         count    : longint;
  548.         aStr    : Str255;
  549. BEGIN
  550.     fSubject.GetText(aStr);
  551.     reply.fName:= aStr;
  552.     CenterSFPut( where);
  553.     SFPutFile( where, 'Save message as:', reply.fName, NIL, reply);
  554.     gApplication.UpdateAllWindows;
  555.     IF reply.good THEN BEGIN        
  556.         IF 0 <> FSDelete( reply.fName, reply.vRefnum) THEN ;
  557.         FailOSErr( Create( reply.fName, reply.vRefnum, 'EDIT', 'TEXT'));
  558.         FailOSErr( FSOpen( reply.fName, reply.vRefnum, fileRef));
  559.         h:= fMailView.fTextData.fChars;
  560.         IF (h<>NIL) THEN BEGIN
  561.             count:= max( 0, GetHandleSize(h) ); {-1? drop 0 at end }
  562.             HLock( h);
  563.             FailOSErr( FSWrite( fileRef, count, h^));
  564.             HUnLock( h);
  565.             END;
  566.         err:= FSClose( fileRef);
  567.         END;
  568. END;
  569.  
  570.  
  571.  
  572. PROCEDURE TPopmailWindow.DoEvent(eventNumber: EventNumber; 
  573.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  574. VAR    aPOP: TPOP;
  575. BEGIN
  576.     CASE eventNumber OF
  577.         mPopNext    : IF (fPOP=NIL) THEN OpenPop
  578.                                 ELSE IF FetchOne(fMsgNum+1) THEN ;
  579.                                 
  580.         mPopLast    : IF (fPOP=NIL) THEN OpenPop
  581.                                 ELSE IF FetchOne(fMsgNum-1) THEN ;
  582.         
  583.         mPopDelete: IF (fPOP<>NIL) THEN BEGIN 
  584.                     TPOP(fPOP).DeleteMail( fMsgNum); 
  585.                     END;
  586.                     
  587.         mPopSave: SaveMail; 
  588.                 
  589.         mCheckboxHit: IF (source = fDelCheck) THEN BEGIN 
  590.             IF fDelCheck.IsOn & NOT fDelBut.IsDimmed THEN BEGIN
  591.                 fDelBut.ViewEnable( FALSE, NOT kRedraw);
  592.                 fDelBut.DimState( TRUE, kRedraw);
  593.                 END
  594.             ELSE IF NOT fDelCheck.IsOn & fDelBut.IsDimmed THEN BEGIN
  595.                 fDelBut.ViewEnable( TRUE, NOT kRedraw);
  596.                 fDelBut.DimState( FALSE, kRedraw);
  597.                 END;
  598.             END;
  599.             
  600.         Otherwise
  601.             INHERITED DoEvent(eventNumber, source, event);
  602.         END;
  603. END;
  604.  
  605.  
  606. PROCEDURE TPopmailWindow.OpenPop; 
  607. VAR    aPOP    : TPOP;
  608. BEGIN
  609.     IF (length(gPassword)=0) | (gPassword[1] = '»') 
  610.      | (length(gMyPOPAddress)=0) | (gMyPOPAddress[1] = '»')THEN
  611.         OpenMailPref;
  612.         
  613.     IF (length(gPassword)=0) | (gPassword[1] = '»') 
  614.      | (length(gMyPOPAddress)=0) | (gMyPOPAddress[1] = '»')THEN
  615.         EXIT(OpenPop);
  616.  
  617. {- gDebugBell:= TRUE;}
  618. {- DebugMsg('TPopmailWindow New IPOP');}
  619.     
  620.     New(aPOP); 
  621.     FailNIL(aPOP);
  622.     aPOP.IPOP( gMyPOPAddress, gPassword);
  623.     aPOP.InstallMessageLine( fStatus); 
  624.     aPOP.ResetHost( gMyPOPAddress, gPassword);  {or aPop.ReOpen; } 
  625.     TPOP(fPOP):= aPOP;
  626.  
  627. {- DebugMsg('TPopmailWindow done IPOP');}
  628.  
  629.     IF FetchOne(1) THEN ;
  630. END;
  631.  
  632.  
  633. PROCEDURE TPopmailWindow.Close; OVERRIDE;
  634. VAR     fi: failInfo;
  635.         PROCEDURE HdlFail(error: OSErr; message: LONGINT);
  636.         BEGIN
  637.             INHERITED Close;
  638.         END;
  639. BEGIN
  640.     CatchFailures(fi, HdlFail);
  641.     TObject(fPOP):= FreeIfObject( fPOP);
  642.     Success(fi);
  643.     INHERITED Close;
  644. END;
  645.  
  646.  
  647. FUNCTION TPopmailWindow.FetchOne(theMsgNum: integer): Boolean; 
  648. VAR
  649.     hMsg    : handle;
  650.     andDelete, gotone, gotsub, gotfrom: boolean;
  651.     aPOP    : TPOP;
  652.     nMsg    : integer;
  653.     aStr, bStr: Str255;
  654.     hc        : hcFile;
  655. BEGIN
  656.     gotone:= FALSE;
  657.     IF (fDelCheck=NIL) THEN andDelete:= FALSE
  658.     ELSE andDelete:= fDelCheck.IsOn;  
  659.     aPOP:= TPOP(fPOP); { fPOP is stored as TObject... }
  660.     nMsg:= 0;
  661.     
  662.     IF (aPOP<>NIL) & (aPOP.MailWaiting) THEN BEGIN
  663.         nMsg:= aPOP.NumberOfMessages;
  664.         IF (theMsgNum <= nMsg) THEN BEGIN
  665.             fMsgNum:= theMsgNum;
  666.             hMsg:= aPOP.ReadMail( fMsgNum, andDelete); 
  667.             IF hMsg <> NIL THEN BEGIN
  668.  
  669.                 hcOpen( hc, hMsg);
  670.                 gotsub:= FALSE; gotfrom:= FALSE;
  671.                 REPEAT
  672.                     aStr:= hcReadln( hc);
  673.                     IF pos('From:', aStr) = 1 THEN BEGIN
  674.                         Delete( aStr, 1, 5);
  675.                         IF (fFrom<>NIL) THEN fFrom.SetText( aStr, TRUE);
  676.                         gotfrom:= TRUE;
  677.                         END;
  678.                     IF pos('Subject:',aStr) = 1 THEN BEGIN
  679.                         Delete( aStr, 1, 8);
  680.                         IF (fSubject<>NIL) THEN fSubject.SetText( aStr, TRUE);
  681.                         gotsub:= TRUE;
  682.                         END;
  683.                 UNTIL (gotsub & gotfrom) | hcEof( hc);
  684.                 
  685. {!!! Must keep hMsg & optionally save to disk,
  686.     and check if > 32,000 chars, since TEView will truncate/bomb long msgs
  687. !!!}
  688.                 if (GetHandleSize(hMsg)>31000) THEN 
  689.                     aPOP.ShowMessage( 'More text than window can hold…');
  690.  
  691.                 {?? does someone else dispose these -- yes, sendmailview.free}
  692.                 IF (NIL = DisposeIfHandle(Handle(fMailView.fTextData.fChars))) THEN;
  693.                 fMailView.fTextData.fChars:= hMsg;
  694.                 
  695.                 IF (NIL = DisposeIfHandle(Handle(fMailView.fTextData.fStyles))) THEN;
  696.                 fMailView.fTextData.fStyles:= NIL;
  697.                 IF (NIL = DisposeIfHandle(Handle(fMailView.fTextData.fElements))) THEN;
  698.                 fMailView.fTextData.fElements:= NIL;
  699.                 
  700.                 fMailView.ShowReverted;
  701.                 gotone:= TRUE;
  702.                 END;
  703.             END;
  704.         { aPOP.Release; ??? } 
  705.         { ^^ this cuts connection 
  706.                 -- .MailWaiting will reestablish as needed, but at cost of time delay }
  707.         END;
  708.         
  709.     FetchOne:= gotone;
  710.     
  711.     IF (fCountTxt<>NIL) THEN BEGIN
  712.         {!? nMsg is weird ... }
  713.         NumToString( fMsgNum, aStr);
  714.         NumToString( nMsg, bStr);
  715.         fCountTxt.SetText( concat( aStr, ' of ', bStr), kRedraw);
  716.         END;
  717.     IF (fNextBut<>NIL) THEN BEGIN
  718.         fNextBut.ViewEnable( (fMsgNum < nMsg), NOT kRedraw);
  719.         fNextBut.Dimstate( NOT (fMsgNum < nMsg), kRedraw);
  720.         END;
  721.     IF (fLastBut<>NIL) THEN BEGIN
  722.         fLastBut.ViewEnable( (fMsgNum > 1), NOT kRedraw);
  723.         fLastBut.Dimstate( NOT (fMsgNum > 1), kRedraw);
  724.         END;
  725. END;
  726.  
  727.  
  728.  
  729.  
  730.  
  731. { TGBFastAWindow .......................................}
  732.  
  733. CONST
  734.     kFastaNucMenu = 2100;
  735.     kFastaProtMenu = 2101;
  736.     kBlastNucMenu = 2102;
  737.     kBlastProtMenu = 2103;
  738.     
  739.     
  740. PROCEDURE TGBFastAWindow.IGBFastAWindow( aSeq: TSequence);
  741. VAR
  742.     aSendBut: TButton;
  743.     aFrom        : TEditText;
  744.     hData    : Handle;
  745.     isAmino: boolean;
  746. BEGIN    
  747.     {---
  748.     IPrefWindow;
  749.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  750.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  751.   fTo             := TEditText(FindSubView('eTo:'));
  752.     fStatus        := TStaticText(FindSubView('tSTS'));
  753.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  754.   aFrom            := TEditText(FindSubView('eFm:'));  
  755.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  756.     aSendBut:= TButton(FindSubView('OKAY'));
  757.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  758.     aSendBut:= TButton(FindSubView('Help'));
  759.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  760.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  761.     ----}
  762.     ISendmailWindow;
  763.     fWantSave:= TRUE;
  764.  
  765.     IF (aSeq<>NIL) THEN BEGIN
  766.         hData:= fSendmailView.fTextData.fChars;
  767.       aSeq.doWriteSelectionHandle( hData, kPearson);
  768.                                                                         {^^^ view field??}
  769.         isAmino:= (aSeq.fKind = kAmino);
  770.         END
  771.     ELSE
  772.         isAmino:= FALSE;
  773.  
  774.     fScore        := TNumberText(FindSubView('SCOR'));
  775.     fAligns        := TNumberText(FindSubView('ALNS'));
  776.     fDatabank    := TPopUp(FindSubView('DATA'));
  777.     fAmino        := TRadio(FindSubView('rAMI'));
  778.     fNucleic  := TRadio(FindSubView('rNUC'));
  779.     fAmino.SetState( isAmino, NOT kRedraw);
  780.     fNucleic.SetState( NOT isAmino, NOT kRedraw);
  781.     IF isAmino THEN 
  782.         fDataBank.SetPopup( GetMenu( kFastaProtMenu), 1, NOT kRedraw) 
  783.     ELSE
  784.         fDataBank.SetPopup( GetMenu( kFastaNucMenu), 1, NOT kRedraw);
  785. END;
  786.         
  787.         
  788. PROCEDURE TGBFastAWindow.DoEvent(eventNumber: EventNumber; 
  789.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  790. BEGIN
  791.     CASE eventNumber OF
  792.         {- mSendit            : BEGIN Sendit; CloseAndFree; END; }
  793.         
  794.         mRadioHit:  
  795.           IF (source=fNucleic) | (source=fAmino) THEN BEGIN
  796.                 IF fAmino.IsOn THEN 
  797.                     fDataBank.SetPopup( GetMenu( kFastaProtMenu), 1, kRedraw) 
  798.                 ELSE
  799.                     fDataBank.SetPopup( GetMenu( kFastaNucMenu), 1, kRedraw);
  800.                 END;
  801.  
  802.         Otherwise
  803.             INHERITED DoEvent(eventNumber, source, event);
  804.         END;
  805. END;
  806.  
  807. {-------
  808. fasta search mail:
  809.     From:  drbob@someaddress.somewhere.edu Tue Jun 14 21:36:38 1988
  810.     Date:  14 Jun 1988 2129:02-PDT
  811.     To:    SEARCH@GENBANK.BIO.NET  
  812.     Subject:  
  813.     DATALIB GenBank/other_mammalian
  814.     KTUP 4
  815.     SCORES 100
  816.     ALIGNMENTS 20
  817.     BEGIN
  818.     >BOVPRL GenBank entry BOVPRL from gbmam file.907 nucleotides. 
  819.     tgcttggctgaggagccataggacgagagcttcctggtgaagtgtgtttcttgaaatcat
  820.     caccaccatggacagcaaa
  821. ---------}
  822.  
  823. PROCEDURE TGBFastAWindow.Sendit; OVERRIDE;
  824. VAR
  825.     theTo, aStr: str255;
  826.     theSubject, theCCopy: string[1];
  827.     theMessage: Handle;
  828.     hc    : hcFile;
  829.     n        : longint;
  830. BEGIN
  831.     IF BadSMTPAddresses THEN EXIT(Sendit);
  832.         
  833.     fTo.GetText( theTo); 
  834.     theSubject:= '';
  835.     theCCopy:= '';
  836.  
  837.     theMessage:= NewPermHandle(1000);
  838.     hc.h:= theMessage;
  839.     hc.len:= 0;
  840.     
  841.     n:= fDatabank.GetCurrentItem;
  842.     fDatabank.GetItemText( n, aStr);
  843.     hcWriteln( hc, concat('DATALIB ',aStr));
  844.     
  845.     n:= fScore.GetValue;
  846.     hcWrite( hc, 'SCORES '); hcWriteInt( hc, n); hcWriteln( hc, '');
  847.     
  848.     n:= fAligns.GetValue;
  849.     hcWrite( hc, 'ALIGNMENTS '); hcWriteInt( hc, n); hcWriteln( hc, '');
  850.  
  851.     hcWriteln( hc, 'BEGIN');
  852.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  853.     hcWriteln( hc, '');
  854.     SetHandleSize( hc.h, hc.len);
  855.     FailMemError;
  856.         
  857.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  858.     DisposHandle( theMessage);
  859. END;
  860.  
  861.  
  862. PROCEDURE TGBFastAWindow.SetPrefID;  OVERRIDE;
  863. BEGIN
  864.     gPrefWindID:= kGBFastaWindID; gPrefWindName:= 'TGBFastAWindow';
  865. END;
  866.     
  867.     
  868.     
  869.     
  870. { TGBBlastWindow .......................................}
  871.  
  872. PROCEDURE TGBBlastWindow.IGBBlastWindow( aSeq: TSequence);
  873. VAR
  874.     aSendBut: TButton;
  875.     aFrom        : TEditText;
  876.     hData        : Handle;
  877.     isAmino    : boolean;
  878. BEGIN    
  879.     {-----
  880.     IPrefWindow;
  881.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  882.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  883.   fTo             := TEditText(FindSubView('eTo:'));
  884.     fStatus        := TStaticText(FindSubView('tSTS'));
  885.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  886.   aFrom            := TEditText(FindSubView('eFm:'));  
  887.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  888.     aSendBut:= TButton(FindSubView('OKAY'));
  889.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  890.     aSendBut:= TButton(FindSubView('Help'));
  891.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  892.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  893.     ---}
  894.     ISendmailWindow;
  895.     fWantSave:= TRUE;
  896.     
  897.     IF (aSeq<>NIL) THEN BEGIN
  898.         hData:= fSendmailView.fTextData.fChars;
  899.       aSeq.doWriteSelectionHandle( hData, kPearson);
  900.         isAmino:= (aSeq.fKind = kAmino);
  901.         END
  902.     ELSE
  903.         isAmino:= FALSE;
  904.  
  905.     fDatabank    := TPopUp(FindSubView('DATA'));
  906.     fAmino        := TRadio(FindSubView('rAMI'));
  907.     fNucleic  := TRadio(FindSubView('rNUC'));
  908.     fAmino.SetState( isAmino, NOT kRedraw);
  909.     fNucleic.SetState( NOT isAmino, NOT kRedraw);
  910.     IF isAmino THEN 
  911.         fDataBank.SetPopup( GetMenu( kBlastProtMenu), 1,  NOT kRedraw) 
  912.     ELSE
  913.         fDataBank.SetPopup( GetMenu( kBlastNucMenu), 1, NOT kRedraw);
  914. END;
  915.         
  916.         
  917. PROCEDURE TGBBlastWindow.DoEvent(eventNumber: EventNumber; 
  918.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  919. BEGIN
  920.     CASE eventNumber OF
  921.         {- mSendit            : BEGIN Sendit; CloseAndFree; END; }
  922.         
  923.         mRadioHit:  
  924.           IF (source=fNucleic) | (source=fAmino) THEN BEGIN
  925.                 IF fAmino.IsOn THEN 
  926.                     fDataBank.SetPopup( GetMenu( kBlastProtMenu), 1, kRedraw) 
  927.                 ELSE
  928.                     fDataBank.SetPopup( GetMenu( kBlastNucMenu), 1, kRedraw);
  929.                 END;
  930.  
  931.         Otherwise
  932.             INHERITED DoEvent( eventNumber, source, event);
  933.         END;
  934. END;
  935.  
  936. {-------
  937. blast search mail:
  938.     From:  drgene@someaddress.somewhere.edu Tue Jun 14 21:36:38 1988
  939.     Date:  14 Jun 1988 2129:02-PDT
  940.     To:    BLAST@GENBANK.BIO.NET  
  941.     Subject:  
  942.     BLASTPROGRAM blastn
  943.     DATALIB embl
  944.     BEGIN
  945.     >BOVPRL GenBank entry BOVPRL from gbmam file.907 nucleotides. 
  946.     tgcttggctgaggagccataggacgagagcttcctggtgaagtgtgtttcttgaaatcat
  947.     caccaccatggacagcaaa
  948. ---------}
  949.  
  950. PROCEDURE TGBBlastWindow.Sendit; OVERRIDE;
  951. VAR
  952.     theTo, aStr: str255;
  953.     theSubject, theCCopy: string[1];
  954.     theMessage: Handle;
  955.     hc    : hcFile;
  956.     n        : longint;
  957. BEGIN
  958.     IF BadSMTPAddresses THEN EXIT(Sendit);
  959.         
  960.     fTo.GetText( theTo); 
  961.     theSubject:= '';
  962.     theCCopy:= '';
  963.  
  964.     theMessage:= NewPermHandle(1000);
  965.     hc.h:= theMessage;
  966.     hc.len:= 0;
  967.  
  968.     IF fAmino.IsOn THEN
  969.         hcWriteln( hc, 'BLASTPROGRAM BLASTP')
  970.     ELSE
  971.         hcWriteln( hc, 'BLASTPROGRAM BLASTN'); 
  972.  
  973.     n:= fDatabank.GetCurrentItem;
  974.     fDatabank.GetItemText( n, aStr);
  975.     hcWriteln( hc, concat('DATALIB ',aStr));
  976.     
  977.     hcWriteln( hc, 'BEGIN');
  978.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  979.     hcWriteln( hc, '');
  980.     SetHandleSize( hc.h, hc.len);
  981.     FailMemError;
  982.         
  983.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  984.     DisposHandle( theMessage);
  985. END;
  986.  
  987.  
  988.  
  989.  
  990. PROCEDURE TGBBlastWindow.SetPrefID;  OVERRIDE;
  991. BEGIN
  992.     gPrefWindID:= kGBBlastWindID; gPrefWindName:= 'TGBBlastWindow';
  993. END;
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001. { TNCBIFetchWindow .......................................}
  1002.  
  1003. CONST
  1004.     kNCBINuclibs = 2115;
  1005.     kNCBINucMethods = 2116;
  1006.     kNCBIFetchlibs = 2117;
  1007.     kNCBIProtlibs = 2118;
  1008.     kNCBIProtMethods = 2119;
  1009.  
  1010.     kBlastP = 'blastp';
  1011.     kTBlastN = 'tblastn';
  1012.     kBlastX = 'blastx';
  1013.     kBlastN = 'blastn';
  1014.  
  1015.  
  1016. PROCEDURE TNCBIFetchWindow.INCBIFetchWindow;
  1017. BEGIN    
  1018.     ISendmailWindow;
  1019.     fWantSave:= TRUE;
  1020.     fDatabank    := TPopUp(FindSubView('DATA'));
  1021.     fNDocs        := TNumberText(FindSubView('ndoc'));
  1022.     fNLines        := TNumberText(FindSubView('nlin'));
  1023.     fStartDoc    := TNumberText(FindSubView('idoc'));
  1024. END;
  1025.         
  1026. PROCEDURE TNCBIFetchWindow.Sendit; OVERRIDE;
  1027. VAR
  1028.     theTo, aStr: str255;
  1029.     theSubject, theCCopy: string[1];
  1030.     theMessage: Handle;
  1031.     hc    : hcFile;
  1032.     n        : longint;
  1033.     k        : integer;
  1034. BEGIN
  1035.     IF BadSMTPAddresses THEN EXIT(Sendit);
  1036.         
  1037.     fTo.GetText( theTo); 
  1038.     theSubject:= '';
  1039.     theCCopy:= '';
  1040.     theMessage:= NewPermHandle(1000);
  1041.     FailNIL( theMessage);
  1042.     hc.h:= theMessage;
  1043.     hc.len:= 0;
  1044.  
  1045.     k:= fDatabank.GetCurrentItem;
  1046.     fDatabank.GetItemText( k, aStr);
  1047.     k:= pos(' ', aStr); IF (k>0) THEN aStr[0]:= chr(k-1);
  1048.     hcWriteln( hc, concat('DATALIB ',aStr));
  1049.  
  1050.     fNDocs.GetText( aStr);
  1051.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('MAXDOCS ',aStr));
  1052.     fNLines.GetText( aStr);
  1053.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('MAXLINES ',aStr));
  1054.     fStartDoc.GetText( aStr);
  1055.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('STARTDOC ',aStr));
  1056.     
  1057.     hcWriteln( hc, 'BEGIN');
  1058.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1059.     hcWriteln( hc, '');
  1060.     SetHandleSize( hc.h, hc.len);
  1061.     FailMemError;
  1062.     
  1063.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1064.     DisposHandle( theMessage);
  1065. END;
  1066.  
  1067.  
  1068.  
  1069. PROCEDURE TNCBIFetchWindow.SetPrefID;  OVERRIDE;
  1070. BEGIN
  1071.     gPrefWindID:= kNCBIFetchWindID; gPrefWindName:= 'TNCBIFetchWindow';
  1072. END;
  1073.  
  1074.  
  1075.  
  1076.  
  1077.     
  1078. { TNCBIBlastWindow .......................................}
  1079.  
  1080.  
  1081. PROCEDURE TNCBIBlastWindow.SetMenus( redraw: boolean);
  1082. VAR  method: Str255; k: integer;
  1083. BEGIN
  1084.  
  1085.     {!?? or use one methods menu & one datalib menu, & disable nonusable items }
  1086.     IF (fMethod<>NIL) & (fDataBank <> NIL) THEN BEGIN
  1087.         IF fAmino.IsOn THEN BEGIN
  1088.             IF fMethod.fMenuID <> kNCBIProtMethods THEN
  1089.                 fMethod.SetPopup( GetMenu( kNCBIProtMethods), 1, redraw);
  1090.             END
  1091.         ELSE BEGIN
  1092.             IF fMethod.fMenuID <> kNCBINucMethods THEN
  1093.                 fMethod.SetPopup( GetMenu( kNCBINucMethods), 1, redraw);
  1094.             END;
  1095.     
  1096.         k:= fMethod.GetCurrentItem;
  1097.         fMethod.GetItemText( k, method);
  1098.         k:= pos(' ', method); IF (k>0) THEN method[0]:= chr(k-1);
  1099.         
  1100.         IF (method = kBlastP) | (method = kBlastX) THEN BEGIN
  1101.             IF fDataBank.fMenuID <> kNCBIProtLibs THEN
  1102.                 fDataBank.SetPopup( GetMenu( kNCBIProtlibs), 1,  redraw);
  1103.             END
  1104.         ELSE BEGIN
  1105.             IF fDataBank.fMenuID <> kNCBINuclibs THEN
  1106.                 fDataBank.SetPopup( GetMenu( kNCBINuclibs), 1,  redraw);
  1107.             END;
  1108.         END;
  1109. END;
  1110.  
  1111.  
  1112. PROCEDURE TNCBIBlastWindow.INCBIBlastWindow( aSeq: TSequence);
  1113. VAR
  1114.     aSendBut: TButton;
  1115.     aFrom        : TEditText;
  1116.     hData        : Handle;
  1117.     isAmino    : boolean;
  1118. BEGIN    
  1119.     {-----
  1120.     IPrefWindow;
  1121.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1122.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1123.   fTo             := TEditText(FindSubView('eTo:'));
  1124.     fStatus        := TStaticText(FindSubView('tSTS'));
  1125.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1126.   aFrom            := TEditText(FindSubView('eFm:'));  
  1127.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1128.     aSendBut:= TButton(FindSubView('OKAY'));
  1129.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1130.     aSendBut:= TButton(FindSubView('Help'));
  1131.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1132.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1133.     ------}
  1134.     ISendmailWindow;
  1135.     fWantSave:= TRUE;
  1136.  
  1137.     IF (aSeq<>NIL) THEN BEGIN
  1138.         hData:= fSendmailView.fTextData.fChars;
  1139.       aSeq.doWriteSelectionHandle( hData, kPearson);
  1140.         isAmino:= (aSeq.fKind = kAmino);
  1141.         END
  1142.     ELSE
  1143.         isAmino:= FALSE;
  1144.  
  1145.     fDatabank    := TPopUp(FindSubView('DATA'));
  1146.     fMethod        := TPopUp(FindSubView('METH')); 
  1147.     fDesc            := TNumberText(FindSubView('ndes'));  
  1148.     fAlign        := TNumberText(FindSubView('nali'));
  1149.     fExcut        := TEditText(FindSubView('ecut'));
  1150.     fICut            := TEditText(FindSubView('icut'));
  1151.     fHistogram:= TCheckBox(FindSubView('hist'));
  1152.     
  1153.     fAmino        := TRadio(FindSubView('rAMI'));
  1154.     fNucleic  := TRadio(FindSubView('rNUC'));
  1155.     IF (fAmino<>NIL) THEN fAmino.SetState( isAmino, NOT kRedraw);
  1156.     IF (fNucleic<>NIL) THEN fNucleic.SetState( NOT isAmino, NOT kRedraw);
  1157.     
  1158.     SELF.SetMenus( kDontRedraw); 
  1159.     
  1160. END;
  1161.         
  1162.         
  1163. PROCEDURE TNCBIBlastWindow.DoEvent(eventNumber: EventNumber; 
  1164.                                             source: TEventHandler; event: TEvent); OVERRIDE; 
  1165. BEGIN
  1166.     CASE eventNumber OF
  1167.         {- mSendit : BEGIN Sendit; CloseAndFree; END; }
  1168.         
  1169.         mRadioHit:  
  1170.           IF (source=fNucleic) | (source=fAmino) THEN BEGIN
  1171.                 SELF.SetMenus( kRedraw);
  1172.                 END;
  1173.                 
  1174.         mPopupHit:
  1175.           IF (source=fMethod) THEN BEGIN
  1176.                 SELF.SetMenus( kRedraw);
  1177.                 END;
  1178.         
  1179.         Otherwise
  1180.             INHERITED DoEvent( eventNumber, source, event);
  1181.         END;
  1182. END;
  1183.  
  1184. {-------
  1185. blast search mail:
  1186.     From:  drgene@someaddress.somewhere.edu Tue Jun 14 21:36:38 1988
  1187.     Date:  14 Jun 1988 2129:02-PDT
  1188.     To:    BLAST@ncbi.nlm.nih.gov
  1189.     Subject:  
  1190.     PROGRAM blastn
  1191.     DATALIB embl
  1192.     BEGIN
  1193.     >BOVPRL GenBank entry BOVPRL from gbmam file.907 nucleotides. 
  1194.     tgcttggctgaggagccataggacgagagcttcctggtgaagtgtgtttcttgaaatcat
  1195.     caccaccatggacagcaaa
  1196.  
  1197. PROGRAM          Yes            BLAST program to execute
  1198.                                 (blastp, blastn, blastx, tblastn).
  1199. DATALIB          Yes            Database to be searched (see list in 
  1200.                                 section 6); only one database can be
  1201.                                 be searched per mail message.
  1202. DESCRIPTION      No             Maximum number of short descriptions of
  1203.                                 matching sequences to be reported; default
  1204.                                 is 100.  (See Parameter V, manual page below)
  1205. ALIGNMENTS       No             Maximum number of High Scoring Segment
  1206.                                 Pairs to be reported; default is 50.  (See
  1207.                                 Parameter B, manual page)
  1208. HISTOGRAM        No             Display of histogram of scores with each search;
  1209.                                 default is yes.  Not applicable to BLASTX.  
  1210.                                 (See Parameter H, manual page)
  1211. EXPECT           No             Expectation cutoff; default is 10.0.  (See 
  1212.                                 Parameter E, manual page)
  1213. CUTOFF           No             Cutoff score.  (See Parameter S, manual page)
  1214. BEGIN            Yes            This mandatory parameter is not paired with a
  1215.                                 value and must be the last parameter before
  1216.                                 the actual query.
  1217. ---------}
  1218.  
  1219. PROCEDURE TNCBIBlastWindow.Sendit; OVERRIDE;
  1220. VAR
  1221.     theTo, aStr: str255;
  1222.     theSubject, theCCopy: string[1];
  1223.     theMessage: Handle;
  1224.     hc    : hcFile;
  1225.     n        : longint;
  1226.     k        : integer;
  1227. BEGIN
  1228.     IF BadSMTPAddresses THEN EXIT(Sendit);
  1229.         
  1230.     fTo.GetText( theTo); 
  1231.     theSubject:= '';
  1232.     theCCopy:= '';
  1233.  
  1234.     theMessage:= NewPermHandle(1000);
  1235.     hc.h:= theMessage;
  1236.     hc.len:= 0;
  1237.  
  1238.     fMethod.GetItemText( fMethod.GetCurrentItem, aStr);
  1239.     k:= pos(' ', aStr); IF (k>0) THEN aStr[0]:= chr(k-1);
  1240.     hcWriteln( hc, concat('PROGRAM ', aStr));
  1241.  
  1242.     fDesc.GetText( aStr);
  1243.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('DESCRIPTION ',aStr));
  1244.     fAlign.GetText( aStr);
  1245.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('ALIGNMENTS ',aStr));
  1246.     IF fHistogram.isOn THEN hcWriteln( hc, 'HISTOGRAM');
  1247.     fExCut.GetText( aStr);
  1248.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('EXPECT ',aStr));
  1249.     fICut.GetText( aStr);
  1250.     IF (length(aStr)>0) THEN hcWriteln( hc, concat('CUTOFF ',aStr));
  1251.     
  1252.     fDatabank.GetItemText( fDatabank.GetCurrentItem, aStr);
  1253.     k:= pos(' ', aStr); IF (k>0) THEN aStr[0]:= chr(k-1);
  1254.     hcWriteln( hc, concat('DATALIB ',aStr));
  1255.     
  1256.     hcWriteln( hc, 'BEGIN');
  1257.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1258.     hcWriteln( hc, '');
  1259.     SetHandleSize( hc.h, hc.len);
  1260.     FailMemError;
  1261.         
  1262.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1263.     DisposHandle( theMessage);
  1264. END;
  1265.  
  1266.  
  1267.  
  1268. PROCEDURE TNCBIBlastWindow.SetPrefID;  OVERRIDE;
  1269. BEGIN
  1270.     gPrefWindID:= kNCBIBlastWindID; gPrefWindName:= 'TNCBIBlastWindow';
  1271. END;
  1272.  
  1273.  
  1274. {    TGeneidWindow     -------------}
  1275.  
  1276. PROCEDURE TGeneidWindow.IGeneidWindow( aSeq: TSequence);
  1277. VAR
  1278.     aSendBut: TButton;
  1279.     aFrom        : TEditText;
  1280.     hData        : Handle;
  1281. BEGIN    
  1282.     {----
  1283.     IPrefWindow;
  1284.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1285.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1286.   fTo             := TEditText(FindSubView('eTo:'));
  1287.     fStatus        := TStaticText(FindSubView('tSTS'));
  1288.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1289.   aFrom            := TEditText(FindSubView('eFm:'));  
  1290.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1291.     aSendBut:= TButton(FindSubView('OKAY'));
  1292.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1293.     aSendBut:= TButton(FindSubView('Help'));
  1294.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1295.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1296.     ---}
  1297.     
  1298.     ISendmailWindow;
  1299.     fWantSave:= FALSE;
  1300.     IF (aSeq<>NIL) THEN BEGIN
  1301.         hData:= fSendmailView.fTextData.fChars;
  1302.       aSeq.doWriteSelectionHandle( hData, kPearson);
  1303.         IF NOT (aSeq.fKind = kDna ) THEN ; {Fail....}
  1304.         END;
  1305.         
  1306.     fUseNetgene:= TCheckBox(FindSubView('NetG'));
  1307. END;
  1308.         
  1309.  
  1310. {-------
  1311. Geneid  mail:
  1312.     From:  me@someaddress.somewhere.edu 
  1313.     To:    geneid@darwin.bu.edu
  1314.     Subject:  
  1315.     Genomic Sequence
  1316.     >seqname
  1317.     TTGGCCACTCCCTCTCTGCGCGCTCGCTCGCTCACTGAGGCCGGGCGACCAAAGGTCGCC
  1318.     CGACGCCCGGGCTTTGCCCGGGCGGCCTCAGTGAGCGAGCGAGCGCGCAGAGAGGGAGTG
  1319.     GCCAACTCCATCACTA...................
  1320. ---------}
  1321.  
  1322. PROCEDURE TGeneidWindow.Sendit; OVERRIDE;
  1323. VAR
  1324.     theTo, aStr: str255;
  1325.     theSubject, theCCopy: string[1];
  1326.     theMessage: Handle;
  1327.     hc    : hcFile;
  1328.     n        : longint;
  1329. BEGIN
  1330.     IF BadSMTPAddresses THEN EXIT(SendIt);
  1331.         
  1332.     fTo.GetText( theTo); 
  1333.     theSubject:= '';
  1334.     theCCopy:= '';
  1335.  
  1336.     theMessage:= NewPermHandle(100);
  1337.     hc.h:= theMessage;
  1338.     hc.len:= 0;
  1339.  
  1340.     hcWriteln( hc, 'Genomic Sequence'); 
  1341.     IF (fUseNetgene<>NIL) & (fUseNetgene.IsOn) THEN hcWriteln( hc, 'NetGene'); 
  1342.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1343.     hcWriteln( hc, '');
  1344.     SetHandleSize( hc.h, hc.len);
  1345.     FailMemError;
  1346.         
  1347.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1348.     DisposHandle( theMessage);
  1349. END;
  1350.  
  1351.  
  1352.  
  1353.  
  1354. {    TBlocksWindow     -------------}
  1355.  
  1356. PROCEDURE TBlocksWindow.IBlocksWindow( aSeq: TSequence);
  1357. VAR
  1358.     aSendBut: TButton;
  1359.     aFrom        : TEditText;
  1360.     hData        : Handle;
  1361. BEGIN    
  1362.     {----
  1363.     IPrefWindow;
  1364.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1365.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1366.   fTo             := TEditText(FindSubView('eTo:'));
  1367.     fStatus        := TStaticText(FindSubView('tSTS'));
  1368.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1369.   aFrom            := TEditText(FindSubView('eFm:'));  
  1370.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1371.     aSendBut:= TButton(FindSubView('OKAY'));
  1372.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1373.     aSendBut:= TButton(FindSubView('Help'));
  1374.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1375.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1376.     ----}
  1377.     
  1378.     ISendmailWindow;
  1379.     fWantSave:= FALSE;
  1380.     IF (aSeq<>NIL) THEN BEGIN
  1381.         hData:= fSendmailView.fTextData.fChars;
  1382.       aSeq.doWriteSelectionHandle( hData, kPearson);
  1383.         IF NOT (aSeq.fKind = kDna ) THEN ; {Fail....}
  1384.         END;
  1385.         
  1386. END;
  1387.         
  1388.  
  1389. {-------
  1390. Blocks  mail:
  1391. To: blocks@howard.fhcrc.org
  1392. Subject:
  1393. >YCZ2_YEAST   Hypothetical 40.1 KD protein in HMR 3' region
  1394. MKAVVIEDGKAVVKEGVPIPELEEGFVLIKTLAVAGNPTDWAHIDYKVGPQGSILGCDAA
  1395. GQIVKLGPAVDPKDFSIGDYIYGFIHGSSVRFPSNGAFAEYSAISTVVAYKSPNELKFLG
  1396. ---------}
  1397.  
  1398. PROCEDURE TBlocksWindow.Sendit; OVERRIDE;
  1399. VAR
  1400.     theTo, aStr: str255;
  1401.     theSubject, theCCopy: string[1];
  1402.     theMessage: Handle;
  1403.     hc    : hcFile;
  1404.     n        : longint;
  1405. BEGIN
  1406.     IF BadSMTPAddresses THEN EXIT(SendIt);
  1407.         
  1408.     fTo.GetText( theTo); 
  1409.     theSubject:= '';
  1410.     theCCopy:= '';
  1411.  
  1412.     theMessage:= NewPermHandle(100);
  1413.     hc.h:= theMessage;
  1414.     hc.len:= 0;
  1415.  
  1416.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1417.     hcWriteln( hc, '');
  1418.     SetHandleSize( hc.h, hc.len);
  1419.     FailMemError;
  1420.         
  1421.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1422.     DisposHandle( theMessage);
  1423. END;
  1424.  
  1425.  
  1426.     
  1427.  
  1428. {    TGenmarkWindow     -------------}
  1429.  
  1430.  
  1431. PROCEDURE TGenmarkWindow.IGenmarkWindow( aSeq: TSequence);
  1432. VAR
  1433.     aSendBut: TButton;
  1434.     aFrom        : TEditText;
  1435.     hData        : Handle;
  1436. BEGIN    
  1437.     {----
  1438.     IPrefWindow;
  1439.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1440.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1441.   fTo             := TEditText(FindSubView('eTo:'));
  1442.     fStatus        := TStaticText(FindSubView('tSTS'));
  1443.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1444.   aFrom            := TEditText(FindSubView('eFm:'));  
  1445.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1446.     aSendBut:= TButton(FindSubView('OKAY'));
  1447.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1448.     aSendBut:= TButton(FindSubView('Help'));
  1449.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1450.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1451.     ---}
  1452.     
  1453.     ISendmailWIndow;
  1454.     fWantSave:= FALSE;
  1455.     IF (aSeq<>NIL) THEN BEGIN
  1456.         hData:= fSendmailView.fTextData.fChars;
  1457.       aSeq.doWriteSelectionHandle( hData, kPlain);
  1458.         IF NOT (aSeq.fKind = kDna ) THEN ; {Fail....}
  1459.         END;
  1460.             
  1461.     fPSTitle:= TEditText( FindSubView('titl'));
  1462.     fPSGraph:= TCheckBox( FindSubView('graf'));
  1463.     fMarkovOrder:= TNumberText( FindSubView('ordr'));
  1464.     fWinStep    := TNumberText( FindSubView('step'));
  1465.     fThreshold:= TNumberText( FindSubView('thrs'));
  1466.     fAnalWin    := TNumberText( FindSubView('awnd'));
  1467. END;
  1468.         
  1469.  
  1470. {-------
  1471. Genmark  mail:
  1472. > mail genmark@ford.gatech.edu
  1473. Subject: genmark
  1474. # This is an example of using all of the different options.
  1475. address biologist@college.edu
  1476. name John Doe
  1477. order 5
  1478. psgraph
  1479. step 6
  1480. threshold 0.50
  1481. title John Doe's New Protein Coding Region
  1482. window 144
  1483. data
  1484. TCAGTTCCAAGGTTTCCCAAAGGGTTTTCCCCAAAAGGGG...
  1485.  
  1486. ---------}
  1487.  
  1488. PROCEDURE TGenmarkWindow.Sendit; OVERRIDE;
  1489. VAR
  1490.     theTo, aStr: str255;
  1491.     theSubject: string[29];
  1492.     theCCopy: string[1];
  1493.     theMessage: Handle;
  1494.     hc    : hcFile;
  1495.     n        : longint;
  1496. BEGIN
  1497.     IF BadSMTPAddresses THEN EXIT(SendIt);
  1498.         
  1499.     fTo.GetText( theTo); 
  1500.     theCCopy:= '';
  1501.  
  1502.     theMessage:= NewPermHandle(1000);
  1503.     hc.h:= theMessage;
  1504.     hc.len:= 0;
  1505.  
  1506.     theSubject:= 'genmark';
  1507.     hcWrite( hc, 'order '); hcWriteInt( hc, fMarkovOrder.GetValue); hcWriteln( hc, '');
  1508.     hcWrite( hc, 'step '); hcWriteInt( hc, fWinStep.GetValue); hcWriteln( hc, '');
  1509.     hcWrite( hc, 'threshold '); hcWriteInt( hc, fThreshold.GetValue); hcWriteln( hc, '');
  1510.     hcWrite( hc, 'window '); hcWriteInt( hc, fAnalWin.GetValue); hcWriteln( hc, '');    
  1511.     IF (fPSGraph<>NIL) & (fPSGraph.IsOn) THEN BEGIN
  1512.         hcWriteln( hc, 'psgraph'); 
  1513.         fPSTitle.GetText( aStr);
  1514.         hcWriteln( hc, concat('title ', aStr));
  1515.         END;
  1516.         
  1517.     hcWriteln( hc, 'Data'); 
  1518.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1519.     hcWriteln( hc, '');
  1520.     SetHandleSize( hc.h, hc.len);
  1521.     FailMemError;
  1522.         
  1523.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1524.     DisposHandle( theMessage);
  1525. END;
  1526.  
  1527.  
  1528. PROCEDURE TGenmarkWindow.SetPrefID;  OVERRIDE;
  1529. BEGIN
  1530.     gPrefWindID:= kGenmarkWindID; gPrefWindName:= 'TGenmarkWindow';
  1531. END;
  1532.     
  1533.     
  1534.  
  1535.  
  1536. { TGrailWindow ------------------}
  1537.  
  1538.         
  1539. PROCEDURE TGrailWindow.IGrailWindow( aSeqList: TSeqList);
  1540. VAR
  1541.     aSendBut: TButton;
  1542.     aFrom        : TEditText;
  1543.     hData        : Handle;
  1544. BEGIN    
  1545.     {---
  1546.     IPrefWindow;
  1547.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1548.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1549.   fTo             := TEditText(FindSubView('eTo:'));
  1550.     FailNIL(fTo);
  1551.     fStatus        := TStaticText(FindSubView('tSTS'));    
  1552.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1553.   aFrom            := TEditText(FindSubView('eFm:'));  
  1554.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1555.     aSendBut:= TButton(FindSubView('OKAY'));
  1556.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1557.     aSendBut:= TButton(FindSubView('Help'));
  1558.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1559.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1560.     ---}
  1561.     ISendmailWindow;
  1562.     fWantSave:= TRUE;
  1563.  
  1564.     IF (aSeqList<>NIL) THEN BEGIN
  1565.         fNumSeqs:= aSeqList.GetSize;
  1566.       hData:= aSeqList.doWriteHandle( kPearson);
  1567.         IF (NIL = DisposeIfHandle(fSendmailView.fTextData.fChars) ) THEN;
  1568.         fSendmailView.fTextData.fChars:= hData;
  1569.         {- IF NOT (TSequence(aSeqList.First).fKind = kDna ) THEN ; } {Fail....}
  1570.         END
  1571.     ELSE
  1572.         fNumSeqs:= 0;
  1573.  
  1574.   fMailID             := TEditText(FindSubView('eGID'));
  1575.     FailNIL(fMailID);
  1576. END;
  1577.  
  1578. {-------
  1579. Grail mail:
  1580.     From:  me@someaddress.somewhere.edu 
  1581.     To:    grail@ornl.gov 
  1582.     Subject:  
  1583.     Sequences number_of_sequences  your_user_ID
  1584.     >seq1name
  1585.     AAAAAAAA........
  1586.     
  1587.     >seq2name
  1588.     TTTTTTTT..........
  1589. ---------}
  1590.  
  1591. PROCEDURE TGrailWindow.Sendit; OVERRIDE;
  1592. VAR
  1593.     theTo, aStr: str255;
  1594.     theSubject, theCCopy: string[1];
  1595.     theMessage: Handle;
  1596.     hc    : hcFile;
  1597.     n        : longint;
  1598. BEGIN
  1599.     IF BadSMTPAddresses THEN EXIT(Sendit);
  1600.         
  1601.     fTo.GetText( theTo); 
  1602.     theSubject:= '';
  1603.     theCCopy:= '';
  1604.  
  1605.     theMessage:= NewPermHandle(1000);
  1606.     hc.h:= theMessage;
  1607.     hc.len:= 0;
  1608.  
  1609.     hcWrite( hc, 'Sequences ');
  1610.     hcWriteInt( hc, fNumSeqs);
  1611.     fMailID.GetText( aStr);
  1612.     hcWriteln( hc, concat(' ',aStr));
  1613.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1614.     hcWriteln( hc, '');
  1615.     SetHandleSize( hc.h, hc.len);
  1616.     FailMemError;
  1617.         
  1618.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1619.     DisposHandle( theMessage);
  1620. END;
  1621.  
  1622.  
  1623. PROCEDURE TGrailWindow.SetPrefID;  OVERRIDE;
  1624. BEGIN
  1625.     gPrefWindID:= kGrailWindID; gPrefWindName:= 'TGrailWindow';
  1626. END;
  1627.     
  1628.     
  1629.     
  1630.     
  1631.  
  1632. { TPythiaWindow ------------------}
  1633.  
  1634.         
  1635. PROCEDURE TPythiaWindow.IPythiaWindow( aSeqList: TSeqList);
  1636. VAR
  1637.     aSendBut: TButton;
  1638.     aFrom        : TEditText;
  1639.     hData        : Handle;
  1640. BEGIN    
  1641.     {---
  1642.     IPrefWindow;
  1643.     fSendmailView:= TDlogTextView(FindSubView('MAIL'));
  1644.     IF (fSendmailView<>NIL) THEN fSendmailView.IDlogTextView(NIL);
  1645.   fTo             := TEditText(FindSubView('eTo:'));
  1646.     FailNIL(fTo);
  1647.     fStatus        := TStaticText(FindSubView('tSTS'));    
  1648.     IF (fStatus<>NIL) THEN fStatus.SetText( '', FALSE);
  1649.   aFrom            := TEditText(FindSubView('eFm:'));  
  1650.     IF (aFrom<>NIL) THEN aFrom.SetText( gMyMailAddress, TRUE);
  1651.     aSendBut:= TButton(FindSubView('OKAY'));
  1652.     IF (aSendBut<>NIL) then aSendBut.fEventNumber:= mSendit;
  1653.     aSendBut:= TButton(FindSubView('Help'));
  1654.     IF (aSendBut<>NIL) THEN aSendBut.fEventNumber:= mHelp;
  1655.     fUnlockTexts:= TCheckBox(FindSubView('Unlk'));
  1656.     ---}
  1657.     
  1658.     ISendmailWindow;
  1659.     fWantSave:= TRUE;
  1660.  
  1661.     IF (aSeqList<>NIL) THEN BEGIN
  1662.       hData:= aSeqList.doWriteHandle( kIG);
  1663.         IF (NIL = DisposeIfHandle(fSendmailView.fTextData.fChars)) THEN;
  1664.         fSendmailView.fTextData.fChars:= hData;
  1665.         {- IF NOT (TSequence(aSeqList.First).fKind = kDna ) THEN ; } {Fail....}
  1666.         END;
  1667.  
  1668.     fDoAlu:= TRadio(FindSubView('alus'));
  1669.     fDoRpts:= TRadio(FindSubView('rpts'));
  1670.     
  1671. END;
  1672.  
  1673. {-------
  1674. Pythia mail:
  1675. To:    pythia@anl.gov 
  1676. Subject: Rpts  [or Alu]
  1677. ;
  1678. HUMGENE1
  1679. CTTCTTTGTGGCATTCTGCTGTCGTATACCATGTGGAACACATTAAGAACGTTATGGCCAGGCGTGTTGG
  1680. CTCACGCCTGTAATCCTAGCACTTTGGGAGGCCAAGGTGGACAGATCACCTGAGGTTGGGAGTTCGAGAC
  1681. ACT1
  1682. ;
  1683. HUMGENE2
  1684. CAATAAAATCCCAATGCTTCCGCTGCAGAAGTCCAAGAGGACATGACTGCGGCTCCATCTAGTCAAGCCC
  1685. AGGGCAGGAATTCCCTTCCAGGAAACCAAGCCAGAGCGCTGTGGTCTCTGGGCTGCCAAGATGTCTCAGA
  1686. A1
  1687. ---------}
  1688.  
  1689. PROCEDURE TPythiaWindow.Sendit; OVERRIDE;
  1690. VAR
  1691.     theTo, aStr: str255;
  1692.     theSubject: string[29];
  1693.     theCCopy: string[1];
  1694.     theMessage: Handle;
  1695.     hc    : hcFile;
  1696.     n        : longint;
  1697. BEGIN
  1698.     IF BadSMTPAddresses THEN EXIT(Sendit);
  1699.         
  1700.     fTo.GetText( theTo); 
  1701.     theCCopy:= '';
  1702.  
  1703.     theMessage:= NewPermHandle(1000);
  1704.     hc.h:= theMessage;
  1705.     hc.len:= 0;
  1706.  
  1707.     if fDoAlu.IsOn THEN    theSubject:= 'Alu'
  1708.     ELSE theSubject:= 'Rpts';
  1709.  
  1710.     hcWriteHand( hc, fSendmailView.fHTE^^.hText);
  1711.     hcWriteln( hc, '');
  1712.     SetHandleSize( hc.h, hc.len);
  1713.     FailMemError;
  1714.         
  1715.     MakeSMTP( theTo, theSubject, theCCopy, theMessage, FALSE);
  1716.     DisposHandle( theMessage);
  1717. END;
  1718.  
  1719.  
  1720. PROCEDURE TPythiaWindow.SetPrefID;  OVERRIDE;
  1721. BEGIN
  1722.     gPrefWindID:= kPythiaWindID; gPrefWindName:= 'TPythiaWindow';
  1723. END;
  1724.     
  1725.     
  1726.     
  1727.  
  1728. { OpenDialogs ....................................}
  1729.  
  1730. CONST
  1731.             {! USeqApp.app.p is owner of these command numbers; they may change !}
  1732.     cSendMail    =    2103;
  1733.     cGBFetch    = 2105;
  1734.     cBugMail    = 2106;
  1735.     cEMBLFetch    = 2107;
  1736.     cGBFasta = 2110;
  1737.     cGBBlast    = 2111;
  1738.     cGeneidSearch = 2112;
  1739.     cGrailSearch = 2113;
  1740.     cUHServer = 2114;
  1741.     cGenmarkSearch = 2118;
  1742.     cBlocksSearch = 2119;
  1743.     cPythiaSearch = 2120;
  1744.  
  1745. PROCEDURE InitializeMailPrefs;
  1746. VAR     aWind    : TMailPrefWindow;
  1747.             aTCP    : TTCP;
  1748. BEGIN
  1749.     New(aTCP); 
  1750.     FailNIL(aTCP);
  1751.     aTCP.ITCP;
  1752.     gTCPIsInstalled:= aTCP.IsTCPInstalled;
  1753.     aTCP.Free;
  1754.  
  1755.     gMailerID:= concat( 'SeqApp ',compdate);
  1756.  
  1757.     gMyMailAddress:= '';
  1758.     gSMTPHost    := '';
  1759.     gMyPOPAddress    := '';
  1760.     gPassword    := '';
  1761.     aWind := TMailPrefWindow(gViewServer.NewTemplateWindow(kMailPrefWindID, NIL));
  1762.     IF (aWind<>NIL) THEN BEGIN         
  1763.         aWind.IMailPrefWindow;
  1764.         aWind.SetGlobals;
  1765.         aWind.Free;
  1766.         END;
  1767.         
  1768.     IF gDeadStripSuppression THEN BEGIN
  1769.     {-    IF Member(TObject(NIL), THiddenText) THEN; -}
  1770.         IF Member(TObject(NIL), TMailPrefWindow) THEN;
  1771.         IF Member(TObject(NIL), TNCBIfetchWindow) THEN;
  1772.         IF Member(TObject(NIL), TNCBIBlastWindow) THEN;
  1773.         IF Member(TObject(NIL), TGBBlastWindow) THEN;
  1774.         IF Member(TObject(NIL), TGrailWindow) THEN;
  1775.         IF Member(TObject(NIL), TGeneidWindow) THEN;
  1776.         IF Member(TObject(NIL), TGenmarkWindow) THEN;
  1777.         IF Member(TObject(NIL), TBlocksWindow) THEN;
  1778.         IF Member(TObject(NIL), TPythiaWindow) THEN;
  1779.         IF Member(TObject(NIL), TEMBLFetchWindow) THEN;
  1780.         IF Member(TObject(NIL), TUHServerWindow) THEN;
  1781.         IF Member(TObject(NIL), TBugmailWindow) THEN;
  1782.         IF Member(TObject(NIL), TPopmailWindow) THEN;
  1783.         IF Member(TObject(NIL), TSendmailWindow) THEN;
  1784.         END;
  1785. END;
  1786.  
  1787. PROCEDURE OpenMailPref;
  1788. CONST  msgMyError = $80001234;
  1789. VAR   aWind    : TMailPrefWindow;
  1790. BEGIN
  1791.     aWind := TMailPrefWindow(gViewServer.NewTemplateWindow(kMailPrefWindID, NIL));
  1792.     FailNIL(aWind);          
  1793.     aWind.IMailPrefWindow;
  1794.     aWind.ModalDialog;
  1795.     aWind.CloseAndFree;
  1796.     {- aWind.Free; }  
  1797.     IF NOT gTCPIsInstalled THEN BEGIN
  1798.         ParamText('MacTCP is not installed; Internet methods are not available',
  1799.                                     '','Internet','');    
  1800.         Failure( -1, msgMyError);  
  1801.         END;
  1802. END;
  1803.  
  1804. PROCEDURE OpenCheckmail;
  1805.         {! THIS MUST BE Part of a Checkmail/Popmail document so we can save msgs...}
  1806. VAR
  1807.         aWind    : TPopmailWindow;
  1808.         isNowOpen: boolean;
  1809.         
  1810.         PROCEDURE checkWindows( aWind: TWindow);
  1811.         BEGIN
  1812.             IF Member(TObject(aWind), TPopmailWindow) THEN BEGIN
  1813.                 aWind.Select; isNowOpen:= TRUE;
  1814.                 END;
  1815.         END;
  1816. BEGIN
  1817.     isNowOpen:= FALSE;
  1818.     gApplication.ForAllWindowsDo(checkWindows);
  1819.     if NOT isNowOpen then begin
  1820.         aWind := TPopmailWindow(gViewServer.NewTemplateWindow(kPopMailWindID, NIL));
  1821.         FailNIL(aWind);          
  1822.         aWind.IPopmailWindow;
  1823.         aWind.ShowReverted; 
  1824.         aWind.Open; aWind.Select;      
  1825.  
  1826.         {- aWind.OpenPop; }{<< call from PopmailWindow dialog msgs...} 
  1827.         END;
  1828. END;
  1829.  
  1830.  
  1831.  
  1832. PROCEDURE MailTo( aCommand: Integer);
  1833. VAR
  1834.         aSendmail    : TSendmailWindow;
  1835.         aBugmail    : TBugmailWindow;
  1836.         aNCBIfetch    : TNCBIfetchWindow;
  1837.         aUHServer    : TUHServerWindow;
  1838.         aEMBLFetch    : TEMBLFetchWindow;
  1839.         isNowOpen: boolean;
  1840.         
  1841.         PROCEDURE checkSendmail( aWind: TWindow);
  1842.         BEGIN
  1843.             IF Member(TObject(aWind), TSendmailWindow) THEN BEGIN
  1844.                 aWind.Select; isNowOpen:= TRUE;
  1845.                 END;
  1846.         END;
  1847.         PROCEDURE checkBugmail( aWind: TWindow);
  1848.         BEGIN
  1849.             IF Member(TObject(aWind), TBugmailWindow) THEN BEGIN
  1850.                 aWind.Select; isNowOpen:= TRUE;
  1851.                 END;
  1852.         END;
  1853.         PROCEDURE checkNCBIfetch( aWind: TWindow);
  1854.         BEGIN
  1855.             IF Member(TObject(aWind), TNCBIfetchWindow) THEN BEGIN
  1856.                 aWind.Select; isNowOpen:= TRUE;
  1857.                 END;
  1858.         END;
  1859.         PROCEDURE checkUHServer( aWind: TWindow);
  1860.         BEGIN
  1861.             IF Member(TObject(aWind), TUHServerWindow) THEN BEGIN
  1862.                 aWind.Select; isNowOpen:= TRUE;
  1863.                 END;
  1864.         END;
  1865.         PROCEDURE checkEMBL( aWind: TWindow);
  1866.         BEGIN
  1867.             IF Member(TObject(aWind), TEMBLFetchWindow) THEN BEGIN
  1868.                 aWind.Select; isNowOpen:= TRUE;
  1869.                 END;
  1870.         END;
  1871.         
  1872. BEGIN
  1873.     isNowOpen:= FALSE;
  1874.     CASE aCommand OF
  1875.     
  1876.         cSendMail        : 
  1877.             BEGIN
  1878.             gApplication.ForAllWindowsDo(checkSendmail);
  1879.             IF NOT isNowOpen THEN BEGIN
  1880.                 aSendmail := TSendmailWindow(gViewServer.NewTemplateWindow(kSendmailWindID, NIL));
  1881.                 FailNIL( aSendmail);
  1882.                 aSendmail.OpenWindow;
  1883.                 END;
  1884.             END;
  1885.             
  1886.         cBugMail        :  
  1887.             BEGIN
  1888.             gApplication.ForAllWindowsDo(checkBugmail);
  1889.             IF NOT isNowOpen THEN BEGIN
  1890.                 aBugmail := TBugmailWindow(gViewServer.NewTemplateWindow(kBugmailWindID, NIL));
  1891.                 FailNIL( aBugmail);
  1892.                 aBugmail.OpenWindow;
  1893.                 END;
  1894.             END;
  1895.             
  1896.         cGBFetch        :  
  1897.             BEGIN
  1898.             gApplication.ForAllWindowsDo(checkNCBIfetch);
  1899.             IF NOT isNowOpen THEN BEGIN
  1900.                 aNCBIfetch := TNCBIfetchWindow(gViewServer.NewTemplateWindow(kNCBIfetchWindID, NIL));
  1901.                 FailNIL( aNCBIfetch);
  1902.                 aNCBIfetch.INCBIfetchWindow;
  1903.                 aNCBIfetch.ShowReverted; 
  1904.                 aNCBIfetch.Open; aNCBIfetch.Select;      
  1905.                 END;
  1906.             END;
  1907.         
  1908.         cUHServer     :   
  1909.             BEGIN
  1910.             gApplication.ForAllWindowsDo(checkUHServer);
  1911.             IF NOT isNowOpen THEN BEGIN
  1912.                 aUHServer := TUHServerWindow(gViewServer.NewTemplateWindow(kUHServerWindID, NIL));
  1913.                 FailNIL( aUHServer);
  1914.                 aUHServer.OpenWindow;
  1915.                 END;
  1916.             END;
  1917.             
  1918.         cEMBLFetch     : 
  1919.             BEGIN
  1920.             gApplication.ForAllWindowsDo(checkEMBL);
  1921.             IF NOT isNowOpen THEN BEGIN
  1922.                 aEMBLFetch := TEMBLFetchWindow(gViewServer.NewTemplateWindow(kEMBLFetchWindID, NIL));
  1923.                 FailNIL( aEMBLFetch);
  1924.                 aEMBLFetch.OpenWindow;
  1925.                 END;
  1926.             END;
  1927.             
  1928.         END;
  1929. END;
  1930.  
  1931.  
  1932. PROCEDURE MailWithSeq( aCommand: Integer; aSeq: TSequence);
  1933. VAR
  1934.         aBlast    : {TGBBlastWindow;} TNCBIBlastWindow;
  1935.         aFasta    : TGBFastAWindow;
  1936.         aGeneid    : TGeneidWindow;
  1937.         aGenmark: TGenmarkWindow;
  1938.         aBlocks    : TBlocksWindow;
  1939.         isNowOpen: boolean;
  1940.         
  1941.         PROCEDURE checkBlast( aWind: TWindow);
  1942.         BEGIN
  1943.             IF Member(TObject(aWind), TNCBIBlastWindow) THEN BEGIN
  1944.             {- IF Member(TObject(aWind), TGBBlastWindow) THEN BEGIN}
  1945.                 aWind.Select; isNowOpen:= TRUE;
  1946.                 END;
  1947.         END;
  1948.         
  1949.         PROCEDURE checkFasta( aWind: TWindow);
  1950.         BEGIN
  1951.             IF Member(TObject(aWind), TGBFastAWindow) THEN BEGIN
  1952.                 aWind.Select; isNowOpen:= TRUE;
  1953.                 END;
  1954.         END;
  1955.         
  1956.         PROCEDURE checkGeneid( aWind: TWindow);
  1957.         BEGIN
  1958.             IF Member(TObject(aWind), TGeneidWindow) THEN BEGIN
  1959.                 aWind.Select; isNowOpen:= TRUE;
  1960.                 END;
  1961.         END;
  1962.         
  1963.         PROCEDURE checkBlocks( aWind: TWindow);
  1964.         BEGIN
  1965.             IF Member(TObject(aWind), TBlocksWindow) THEN BEGIN
  1966.                 aWind.Select; isNowOpen:= TRUE;
  1967.                 END;
  1968.         END;
  1969.         
  1970.         PROCEDURE checkGenmark( aWind: TWindow);
  1971.         BEGIN
  1972.             IF Member(TObject(aWind), TGenmarkWindow) THEN BEGIN
  1973.                 aWind.Select; isNowOpen:= TRUE;
  1974.                 END;
  1975.         END;
  1976.         
  1977. BEGIN
  1978.     isNowOpen:= FALSE;
  1979.     CASE aCommand OF
  1980.     
  1981.         cGBBlast: BEGIN
  1982.                 gApplication.ForAllWindowsDo(checkBlast);
  1983.                 IF NOT isNowOpen THEN BEGIN
  1984.                     aBlast := TNCBIBlastWindow(gViewServer.NewTemplateWindow(kNCBIBlastWindID, NIL));
  1985.                     FailNIL(aBlast);          
  1986.                     aBlast.INCBIBlastWindow(aSeq);
  1987.                     aBlast.ShowReverted; 
  1988.                     aBlast.Open; aBlast.Select;      
  1989.                     END;
  1990.                 END;
  1991.                 
  1992.         cGBFasta: BEGIN
  1993.                 gApplication.ForAllWindowsDo(checkFasta);
  1994.                 if NOT isNowOpen then begin
  1995.                     aFasta := TGBFastAWindow(gViewServer.NewTemplateWindow(kGBFastAWindID, NIL));
  1996.                     FailNIL(aFasta);          
  1997.                     aFasta.IGBFastAWindow(aSeq);
  1998.                     aFasta.ShowReverted; 
  1999.                     aFasta.Open; aFasta.Select;     
  2000.                     END;
  2001.             END;
  2002.             
  2003.         cGeneidSearch: BEGIN
  2004.                 gApplication.ForAllWindowsDo(checkGeneid);
  2005.                 if NOT isNowOpen then begin
  2006.                     aGeneid := TGeneidWindow(gViewServer.NewTemplateWindow(kGeneidWindID, NIL));
  2007.                     FailNIL(aGeneid);          
  2008.                     aGeneid.IGeneidWindow(aSeq);
  2009.                     aGeneid.ShowReverted; 
  2010.                     aGeneid.Open; aGeneid.Select;      
  2011.                     END;
  2012.                 END;
  2013.                 
  2014.         cBlocksSearch: BEGIN
  2015.                 gApplication.ForAllWindowsDo(checkBlocks);
  2016.                 if NOT isNowOpen then begin
  2017.                     aBlocks := TBlocksWindow(gViewServer.NewTemplateWindow(kBlocksWindID, NIL));
  2018.                     FailNIL(aBlocks);          
  2019.                     aBlocks.IBlocksWindow(aSeq);
  2020.                     aBlocks.ShowReverted; 
  2021.                     aBlocks.Open; aBlocks.Select;     
  2022.                     END;
  2023.                 END;
  2024.                 
  2025.         cGenmarkSearch: BEGIN
  2026.                 gApplication.ForAllWindowsDo(checkGenmark);
  2027.                 if NOT isNowOpen then begin
  2028.                     aGenmark := TGenmarkWindow(gViewServer.NewTemplateWindow(kGenmarkWindID, NIL));
  2029.                     FailNIL(aGenmark);          
  2030.                     aGenmark.IGenmarkWindow(aSeq);
  2031.                     aGenmark.ShowReverted;  
  2032.                     aGenmark.Open; aGenmark.Select;     
  2033.                     END;
  2034.                 END;
  2035.                 
  2036.                 
  2037.         END;
  2038. END;
  2039.  
  2040.  
  2041. PROCEDURE MailWithSeqList( aCommand: Integer;  aSeqList: TSeqList);
  2042. VAR
  2043.         aGrail    : TGrailWindow;
  2044.         aPythia    : TPythiaWindow;
  2045.         isNowOpen: boolean;
  2046.         
  2047.         PROCEDURE checkGrail( aWind: TWindow);
  2048.         BEGIN
  2049.             IF Member(TObject(aWind), TGrailWindow) THEN BEGIN
  2050.                 aWind.Select; isNowOpen:= TRUE;
  2051.                 END;
  2052.         END;
  2053.         PROCEDURE checkPythia( aWind: TWindow);
  2054.         BEGIN
  2055.             IF Member(TObject(aWind), TPythiaWindow) THEN BEGIN
  2056.                 aWind.Select; isNowOpen:= TRUE;
  2057.                 END;
  2058.         END;
  2059.         
  2060. BEGIN
  2061.     isNowOpen:= FALSE;
  2062.     CASE aCommand OF
  2063.     
  2064.         cGrailSearch: BEGIN
  2065.             gApplication.ForAllWindowsDo(checkGrail);
  2066.             IF NOT isNowOpen THEN BEGIN
  2067.                 aGrail := TGrailWindow(gViewServer.NewTemplateWindow(kGrailWindID, NIL));
  2068.                 FailNIL(aGrail);          
  2069.                 aGrail.IGrailWindow(aSeqList);
  2070.                 aGrail.ShowReverted; 
  2071.                 aGrail.Open; aGrail.Select;     
  2072.                 END;
  2073.             END;
  2074.             
  2075.         cPythiaSearch: BEGIN
  2076.             gApplication.ForAllWindowsDo(checkPythia);
  2077.             IF NOT isNowOpen THEN BEGIN
  2078.                 aPythia := TPythiaWindow(gViewServer.NewTemplateWindow(kPythiaWindID, NIL));
  2079.                 FailNIL(aPythia);          
  2080.                 aPythia.IPythiaWindow(aSeqList);
  2081.                 aPythia.ShowReverted;  
  2082.                 aPythia.Open; aPythia.Select;     
  2083.                 END;
  2084.             END;
  2085.             
  2086.         END;
  2087. END;
  2088.  
  2089.  
  2090. (*****
  2091.  
  2092. PROCEDURE OpenFiletransfer;
  2093. CONST
  2094.     msgMyError = $80001234;
  2095. BEGIN
  2096.     ParamText('File transfer is not ready','','File Transfer','');    
  2097.     Failure( -1, msgMyError);  
  2098. END;
  2099.  
  2100. ********)